package com.example.design.adapter.objectadapter;

import com.example.design.adapter.classadapter.Voltage220V;

/**
 * 对象适配器模式的优缺点：
 *
 * 一个适配器可以把多种不同的源角色适配到同一个目标角色，换言之，同一个适配器可以把源类和它的子类都适配到目标接口
 * 与类适配器模式相比，要想置换源类的方法就不容易，如果一个要置换掉源类的一个或多个方法，就只好先做一个源类的子类，将源类的方法置换掉，然后再把源类的子类当作真正的源进行适配
 * 虽然要想置换源类的方法不容易，但是要想增加一些新的方法则方便的很，而且新增加的方法可同时适用于所有的源
 * 在什么情况下使用适配器模式：
 *
 * 系统需要使用现有的类，而此类的接口不符合系统的需要
 * 想要建立一个可以重复使用的类，用于与一些彼此之间没有太大关联的一些类，包括一些可能在将来引进的类一起工作，这些源类不一定有很复杂的接口
 * 对于对象适配器模式而言，在设计里。需要改变多个已有的子类的接口，如果使用类的适配器模式，就要针对每一个子类做一个适配器类，而这不太实际
 * */
public class VoltageAdaptor1 implements Voltage5V1 {
    private Voltage220V voltage220V;

    /**
     * 通过构造器传入一个 Voltage220V 适配器源
     * @param voltage220V
     */
    public VoltageAdaptor1(Voltage220V voltage220V){
        this.voltage220V = voltage220V;
    }

    @Override
    public int output5V() {
        int outputV = 0;
        if(null != voltage220V) {
            outputV = this.voltage220V.output220V() / 44;
        }
        return outputV;
    }
}
